iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Odoo

「Odoo 解構:開源 ERP 平台的進階設計與實踐」系列 第 4

DAY4 ORM-試驗使用三種語言的框架

  • 分享至 

  • xImage
  •  

ORM(Object-Relational Mapping,物件關聯映射)框架是一種技術,用於將面向對象編程中的對象映射到關聯式資料庫中的表格。ORM的主要目的是讓開發人員以面向對象的方式操作數據,而不必直接撰寫SQL語句進行資料庫操作。

ORM框架透過自動將資料庫的表、欄位與應用程式中的類、屬性進行映射,使得開發人員可以像操作物件一樣操作資料庫中的資料,從而提高了開發效率,減少了手動編寫SQL的需求。

常見的ORM框架包括:

  • Java:Hibernate
  • Python:SQLAlchemy、Django ORM
  • C#:Entity Framework

ORM的好處包括:

  • 減少手動撰寫SQL的工作量
  • 增加代碼的可讀性和可維護性
  • 支援資料庫的可攜性(無需針對每種資料庫編寫不同的SQL)

但同時也有一些缺點,例如在進行複雜的查詢時,ORM可能不如手動撰寫SQL那樣高效。

這裡分別使用 Java(Hibernate)、Python(SQLAlchemy)和 C#(Entity Framework)來示範基本的ORM操作,展示如何透過ORM框架來進行簡單的資料庫插入操作。

1. Java (Hibernate)

// Hibernate 示例: 建立 Student 類別與資料庫對應
@Entity
@Table(name = "students")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    private String name;

    // Constructors, getters, setters, etc.
    public Student() {}
    
    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// 使用 Hibernate 進行資料庫操作
public class Main {
    public static void main(String[] args) {
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Student.class).buildSessionFactory();
        Session session = factory.getCurrentSession();
        
        try {
            Student student = new Student("Alice");
            session.beginTransaction();
            session.save(student);
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

2. Python (SQLAlchemy)

# SQLAlchemy 示例: 定義 Student 類別並與資料庫對應
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String)

# 資料庫連接和操作
engine = create_engine('sqlite:///students.db')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

# 新增學生記錄
new_student = Student(name="Alice")
session.add(new_student)
session.commit()

3. C# (Entity Framework)

// Entity Framework 示例: 定義 Student 類別並與資料庫對應
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

public class Student {
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

public class AppDbContext : DbContext {
    public DbSet<Student> Students { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        optionsBuilder.UseSqlite("Data Source=students.db");
    }
}

class Program {
    static void Main() {
        using (var context = new AppDbContext()) {
            context.Database.EnsureCreated();
            
            var student = new Student { Name = "Alice" };
            context.Students.Add(student);
            context.SaveChanges();
        }
    }
}

這三個例子展示了如何透過ORM框架進行基本的資料庫操作,如新增記錄。ORM框架能簡化資料庫操作,並且讓開發者專注於業務邏輯,而不需過多考慮底層SQL的細節。

⚠️在使用 Odoo 的 ORM 時,建議記住以下幾個重點:
1️⃣忘記繁瑣的資料庫操作,放心交給 Odoo 處理。它會自動處理大部分的資料庫管理任務。
2️⃣資料結構的規劃依然非常重要,雖然 Odoo 能簡化資料存取過程,但良好的資料表設計能顯著提高效能,讓開發更加順利。
3️⃣並非所有情況下都需要依賴 Odoo ORM。ORM 雖然強大,但在某些情境下並非最佳選擇,這時候尋找替代方案可能會事半功倍。


上一篇
DAY3遠端本地部署☁️
下一篇
DAY5 QWeb是什麼?網頁與伺服器的應用程式—使用 PyQt5 實作簡易桌面 Web 瀏覽器
系列文
「Odoo 解構:開源 ERP 平台的進階設計與實踐」13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言